import observe from "./observe.js";
import Dep from "./Dep.js";
export default function defineReative(data, key, value) {
    const dep = new Dep();
    if (arguments.length == 2) {
        value = data[key];
    }
    let childOb = observe(value);
    Object.defineProperty(data, key, {
        enumerable: true, //表示可枚举
        configurable: true, //表示可配置
        get() {
            // console.log('访问了obj的' + key + '属性');
            // 如果处于依赖的收集阶段
            if (Dep['target']) {
                if (childOb) {
                    childOb.dep.depend();
                }
                dep.depend();
            }
            return value;
        },
        set(newValue) {
            // console.log('修改了obj的' + key + '属性');
            if (value == newValue) {
                return;
            } else {
                value = newValue;
                childOb = observe(newValue);
                // 发布订阅模式，通知dep
                dep.notify();
            }
        }
    })
}